package com.sunwayhorizo.health.business.registries.employee;

import java.util.List;
import java.util.Map;

import javax.ejb.Local;

import com.sunwayhorizo.health.business.dto.ResultsDTO;
import com.sunwayhorizo.health.business.dto.patad.empi.PatientBaseInfoDTO;
import com.sunwayhorizo.health.business.dto.registries.DepartmentDTO;
import com.sunwayhorizo.health.business.dto.registries.EntitysDTO;
import com.sunwayhorizo.health.business.dto.registries.OrganizationDTO;
import com.sunwayhorizo.health.hl7.common.Hl7Exception;
import com.sunwayhorizo.health.hl7.rim.Employee;
import com.sunwayhorizo.health.hl7.rim.Role;

@Local
public interface EmployeeManagerLocal {

	/**
	 * 添加员工信息
	 * 
	 * @Title: newEmployee
	 * @param entityDTO
	 *            要添加的员工信息
	 * @return ResultsDTO 返回类型
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO newEmployee(EntitysDTO entityDTO) throws Hl7Exception;

	/**
	 * 修改员工信息
	 * 
	 * @Title: updateEmployee
	 * @param entityDTO
	 *            需要修改的员工信息
	 * @return ResultsDTO 返回类型
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO updateEmployee(EntitysDTO entityDTO) throws Hl7Exception;

	/**
	 * 批量删除员工信息
	 * 
	 * @Title: delEmployee
	 * @param empIds
	 *            员工唯一标识集合（默认为员工工号）
	 * @return ResultsDTO 返回类型
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO delEmployee(List<Long> empIds) throws Hl7Exception;

	/**
	 * 根据工作组ID或者姓名查询所有的员工
	 * 
	 * @Title: findEmployeeByCond
	 * @param currentPage
	 *            当前页
	 * @param pageSize
	 *            每页显示的记录数
	 * @param name
	 *            员工名称
	 * @param workGroupId
	 *            工作组ID
	 * @return ResultsDTO 返回类型
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO findEmployeeByWorkGroup(int currentPage, int pageSize,
			String name, String workGroupId) throws Hl7Exception;

	/**
	 * 根据科室ID或者姓名查询所有的员工
	 * 
	 * @Title: findEmployeeByDept
	 * @param currentPage
	 *            当前页
	 * @param pageSize
	 *            每页显示的记录数
	 * @param name
	 *            员工名称
	 * @param departmentId
	 *            科室ID
	 * @return ResultsDTO 返回类型
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO findEmployeeByDept(int currentPage, int pageSize,
			String name, String departmentId) throws Hl7Exception;

	/**
	 * 根据科室ID找出下面所有的员工
	 * 
	 * @Title: findEmpList
	 * @param 科室ID
	 * @return ResultsDTO 返回类型
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO findEmpList(String departmentId) throws Hl7Exception;

	/**
	 * 根据科室ID,职务找出下面所有的医生、护士等员工,科室ID为null的时候找出全院的医生，护士
	 * 
	 * @Title: findEmployeeList
	 * @param 科室ID
	 * @param 职务code编码
	 * @return ResultsDTO 返回类型
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO findEmployeeList(String departmentId, String dicCode)
			throws Hl7Exception;

	/**
	 * 根据工作组，职务/职称查询具体的员工集合，职务/职称为空查询本共组下的所有员工
	 * 
	 * @Title: findEmployeeByWGId
	 * @param workGroupId
	 *            工作组ID
	 * @param dicCode
	 *            职务/职称code编码
	 * @return ResultsDTO 员工角色集合
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public ResultsDTO findEmpList(String workGroupId, String dicCode)
			throws Hl7Exception;

	/**
	 * 根据角色ID，员工唯一标示查询员工工
	 * 
	 * @Title: findEmployeeDetail
	 * @param roleId
	 *            角色id
	 * @param empId
	 *            员工唯一标识
	 * @return Employee 员工角色
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-27下午10:51:17
	 */
	public Employee findEmployeeDetail(long roleId, String empId)
			throws Hl7Exception;

	/**
	 * 根据role实体封装对应的play实体信息
	 * 
	 * @Title: findPlayEntityByRole
	 * @param Role
	 *            role 员工角色
	 * @return PatientBaseInfoDTO 员工基本信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public PatientBaseInfoDTO findPlayEntityByRole(Role role)
			throws Hl7Exception;

	/**
	 * 根据roleId实体封装对应的play实体信息
	 * 
	 * @Title: findPlayEntityByRole
	 * @param roleId
	 *            员工角色Id
	 * @return PatientBaseInfoDTO 员工基本信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public PatientBaseInfoDTO findPlayEntityByRoleId(long roleId)
			throws Hl7Exception;

	/**
	 * 根据roleId查询出对应的scope实体信息
	 * 
	 * @Title: findScopeEntityByRole
	 * @param long roleId 员工角色ID
	 * @return DepartmentDTO 员工对应的科室信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public DepartmentDTO findScopeEntityByRole(long roleId) throws Hl7Exception;

	/**
	 * 根据role实体封装对应的scope实体信息
	 * 
	 * @Title: findScopeEntityByRole
	 * @param Role
	 *            role 员工角色
	 * @return DepartmentDTO 员工对应的科室信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public DepartmentDTO findScopeEntityByRole(Role role) throws Hl7Exception;

	/**
	 * 根据roleId实体封装对应的单位信息
	 * 
	 * @Title: findOrganizationByRole
	 * @param long roleId 员工角色ID
	 * @return OrganizationDTO 员工对应的单位信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public OrganizationDTO findOrganizationByRole(long roleId)
			throws Hl7Exception;

	/**
	 * 根据role实体封装对应的单位信息
	 * 
	 * @Title: findScopeEntityByRole
	 * @param Role
	 *            role 员工角色
	 * @return OrganizationDTO 员工对应的单位信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public OrganizationDTO findOrganizationByRole(Role role)
			throws Hl7Exception;

	/**
	 * 根据roleId实体封装对应的工作组信息
	 * 
	 * @Title: findWorkGroupByRoleId
	 * @param Role
	 *            role 员工角色
	 * @return List<DepartmentDTO> 员工对应的工作组集合
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public List<DepartmentDTO> findWorkGroupByRoleId(long roleId)
			throws Hl7Exception;

	/**
	 * 根据role实体封装对应的工作组信息
	 * 
	 * @Title: findWorkGroupByRole
	 * @param Role
	 *            role 员工角色
	 * @return List<DepartmentDTO> 员工对应的工作组集合
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public List<DepartmentDTO> findWorkGroupByRole(Role role)
			throws Hl7Exception;

	/**
	 * 根据roleId封装对应的人员，科室，单位信息
	 * 
	 * @Title: findScopeEntityByRole
	 * @param long roleId 员工角色ID
	 * @return Map 人员，科室，单位信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public Map<String, Object> findEntityByRole(long roleId)
			throws Hl7Exception;

	/**
	 * 根据role封装对应的人员，科室，单位信息
	 * 
	 * @Title: findScopeEntityByRole
	 * @param Role
	 *            role 员工角色
	 * @return Map 人员，科室，单位信息
	 * @firstAuthor jinzw
	 * @firstTime 2010-12-27下午01:51:17
	 * @lastAuthor jinzw
	 * @lastTime 2010-12-29下午10:51:17
	 */
	public Map<String, Object> findEntityByRole(Role role) throws Hl7Exception;

	/**
	 * 验证人员编号是否存在，存在返回true,不存在返回false
	 * 
	 * @Title: validateExsit
	 * @param employId 
	 *           员工id
	 * @return ResultsDTO 
	 * @firstAuthor obama
	 * @firstTime 2011-04-13 13:51:17
	 * @lastAuthor obama
	 * @lastTime 2011-04-13 13:51:17
	 */
	public ResultsDTO validateExsit(String employId) throws Hl7Exception;

}
